home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / os2 / e33el2.zip / emacs / 19.33 / lisp / diary-lib.el < prev    next >
Lisp/Scheme  |  1996-05-27  |  63KB  |  1,391 lines

  1. ;;; diary-lib.el --- diary functions.
  2.  
  3. ;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1995 Free Software
  4. ;; Foundation, Inc.
  5.  
  6. ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
  7. ;; Keywords: calendar
  8.  
  9. ;; This file is part of GNU Emacs.
  10.  
  11. ;; GNU Emacs is free software; you can redistribute it and/or modify
  12. ;; it under the terms of the GNU General Public License as published by
  13. ;; the Free Software Foundation; either version 2, or (at your option)
  14. ;; any later version.
  15.  
  16. ;; GNU Emacs is distributed in the hope that it will be useful,
  17. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. ;; GNU General Public License for more details.
  20.  
  21. ;; You should have received a copy of the GNU General Public License
  22. ;; along with GNU Emacs; see the file COPYING.  If not, write to the
  23. ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  24. ;; Boston, MA 02111-1307, USA.
  25.  
  26. ;;; Commentary:
  27.  
  28. ;; This collection of functions implements the diary features as described
  29. ;; in calendar.el.
  30.  
  31. ;; Comments, corrections, and improvements should be sent to
  32. ;;  Edward M. Reingold               Department of Computer Science
  33. ;;  (217) 333-6733                   University of Illinois at Urbana-Champaign
  34. ;;  reingold@cs.uiuc.edu             1304 West Springfield Avenue
  35. ;;                                   Urbana, Illinois 61801
  36.  
  37. ;;; Code:
  38.  
  39. (require 'calendar)
  40.  
  41. ;;;###autoload
  42. (defun diary (&optional arg)
  43.   "Generate the diary window for ARG days starting with the current date.
  44. If no argument is provided, the number of days of diary entries is governed
  45. by the variable `number-of-diary-entries'.  This function is suitable for
  46. execution in a `.emacs' file."
  47.   (interactive "P")
  48.   (let ((d-file (substitute-in-file-name diary-file))
  49.         (date (calendar-current-date)))
  50.     (if (and d-file (file-exists-p d-file))
  51.         (if (file-readable-p d-file)
  52.             (list-diary-entries
  53.              date
  54.              (cond
  55.               (arg (prefix-numeric-value arg))
  56.               ((vectorp number-of-diary-entries)
  57.                (aref number-of-diary-entries (calendar-day-of-week date)))
  58.               (t number-of-diary-entries)))
  59.         (error "Your diary file is not readable!"))
  60.       (error "You don't have a diary file!"))))
  61.  
  62. (defun view-diary-entries (arg)
  63.   "Prepare and display a buffer with diary entries.
  64. Searches the file named in `diary-file' for entries that
  65. match ARG days starting with the date indicated by the cursor position
  66. in the displayed three-month calendar."
  67.   (interactive "p")
  68.   (let ((d-file (substitute-in-file-name diary-file)))
  69.     (if (and d-file (file-exists-p d-file))
  70.         (if (file-readable-p d-file)
  71.             (list-diary-entries (calendar-cursor-to-date t) arg)
  72.           (error "Diary file is not readable!"))
  73.       (error "You don't have a diary file!"))))
  74.  
  75. (defun view-other-diary-entries (arg diary-file)
  76.   "Prepare and display buffer of diary entries from an alternative diary file.
  77. Prompts for a file name and searches that file for entries that match ARG
  78. days starting with the date indicated by the cursor position in the displayed
  79. three-month calendar."
  80.   (interactive
  81.    (list (cond ((null current-prefix-arg) 1)
  82.                ((listp current-prefix-arg) (car current-prefix-arg))
  83.                (t current-prefix-arg))
  84.          (setq diary-file (read-file-name "Enter diary file name: "
  85.                                           default-directory nil t))))
  86.   (view-diary-entries arg))
  87.  
  88. (autoload 'check-calendar-holidays "holidays"
  89.   "Check the list of holidays for any that occur on DATE.
  90. The value returned is a list of strings of relevant holiday descriptions.
  91. The holidays are those in the list `calendar-holidays'."
  92.   t)
  93.  
  94. (autoload 'calendar-holiday-list "holidays"
  95.   "Form the list of holidays that occur on dates in the calendar window.
  96. The holidays are those in the list `calendar-holidays'."
  97.   t)
  98.  
  99. (autoload 'diary-french-date "cal-french"
  100.   "French calendar equivalent of date diary entry."
  101.   t)
  102.  
  103. (autoload 'diary-mayan-date "cal-mayan"
  104.   "Mayan calendar equivalent of date diary entry."
  105.   t)
  106.  
  107. (autoload 'diary-iso-date "cal-iso"
  108.   "ISO calendar equivalent of date diary entry."
  109.   t)
  110.  
  111. (autoload 'diary-julian-date "cal-julian"
  112.   "Julian calendar equivalent of date diary entry."
  113.   t)
  114.  
  115. (autoload 'diary-astro-day-number "cal-julian"
  116.   "Astronomical (Julian) day number diary entry."
  117.   t)
  118.  
  119. (autoload 'diary-chinese-date "cal-china"
  120.   "Chinese calendar equivalent of date diary entry."
  121.   t)
  122.  
  123. (autoload 'diary-islamic-date "cal-islam"
  124.   "Islamic calendar equivalent of date diary entry."
  125.   t)
  126.  
  127. (autoload 'list-islamic-diary-entries "cal-islam"
  128.   "Add any Islamic date entries from the diary file to `diary-entries-list'."
  129.   t)
  130.  
  131. (autoload 'mark-islamic-diary-entries "cal-islam"
  132.   "Mark days in the calendar window that have Islamic date diary entries."
  133.   t)
  134.  
  135. (autoload 'mark-islamic-calendar-date-pattern "cal-islam"
  136.    "Mark dates in calendar window that conform to Islamic date MONTH/DAY/YEAR."
  137.   t)
  138.  
  139. (autoload 'diary-hebrew-date "cal-hebrew"
  140.   "Hebrew calendar equivalent of date diary entry."
  141.   t)
  142.  
  143. (autoload 'diary-omer "cal-hebrew"
  144.   "Omer count diary entry."
  145.   t)
  146.  
  147. (autoload 'diary-yahrzeit "cal-hebrew"
  148.   "Yahrzeit diary entry--entry applies if date is yahrzeit or the day before."
  149.   t)
  150.  
  151. (autoload 'diary-parasha "cal-hebrew"
  152.   "Parasha diary entry--entry applies if date is a Saturday."
  153.   t)
  154.  
  155. (autoload 'diary-rosh-hodesh "cal-hebrew"
  156.   "Rosh Hodesh diary entry."
  157.   t)
  158.  
  159. (autoload 'list-hebrew-diary-entries "cal-hebrew"
  160.   "Add any Hebrew date entries from the diary file to `diary-entries-list'."
  161.   t)
  162.  
  163. (autoload 'mark-hebrew-diary-entries "cal-hebrew"
  164.   "Mark days in the calendar window that have Hebrew date diary entries."
  165.   t)
  166.  
  167. (autoload 'mark-hebrew-calendar-date-pattern "cal-hebrew"
  168.    "Mark dates in calendar window that conform to Hebrew date MONTH/DAY/YEAR."
  169.   t)
  170.  
  171. (autoload 'diary-coptic-date "cal-coptic"
  172.   "Coptic calendar equivalent of date diary entry."
  173.   t)
  174.  
  175. (autoload 'diary-ethiopic-date "cal-coptic"
  176.   "Ethiopic calendar equivalent of date diary entry."
  177.   t)
  178.  
  179. (autoload 'diary-persian-date "cal-persia"
  180.   "Persian calendar equivalent of date diary entry."
  181.   t)
  182.  
  183. (autoload 'diary-phases-of-moon "lunar" "Moon phases diary entry." t)
  184.  
  185. (autoload 'diary-sunrise-sunset "solar"
  186.   "Local time of sunrise and sunset as a diary entry."
  187.   t)
  188.  
  189. (autoload 'diary-sabbath-candles "solar"
  190.   "Local time of candle lighting diary entry--applies if date is a Friday.
  191. No diary entry if there is no sunset on that date."
  192.   t)
  193.  
  194. (defvar diary-syntax-table (copy-syntax-table (standard-syntax-table))
  195.   "The syntax table used when parsing dates in the diary file.
  196. It is the standard syntax table used in Fundamental mode, but with the
  197. syntax of `*' changed to be a word constituent.")
  198.  
  199. (modify-syntax-entry ?* "w" diary-syntax-table)
  200.  
  201. (defun list-diary-entries (date number)
  202.   "Create and display a buffer containing the relevant lines in diary-file.
  203. The arguments are DATE and NUMBER; the entries selected are those
  204. for NUMBER days starting with date DATE.  The other entries are hidden
  205. using selective display.
  206.  
  207. Returns a list of all relevant diary entries found, if any, in order by date.
  208. The list entries have the form ((month day year) string).  If the variable
  209. `diary-list-include-blanks' is t, this list includes a dummy diary entry
  210. \(consisting of the empty string) for a date with no diary entries.
  211.  
  212. After the list is prepared, the hooks `nongregorian-diary-listing-hook',
  213. `list-diary-entries-hook', `diary-display-hook', and `diary-hook' are run.
  214. These hooks have the following distinct roles:
  215.  
  216.     `nongregorian-diary-listing-hook' can cull dates from the diary
  217.         and each included file.  Usually used for Hebrew or Islamic
  218.         diary entries in files.  Applied to *each* file.
  219.  
  220.     `list-diary-entries-hook' adds or manipulates diary entries from
  221.         external sources.  Used, for example, to include d